package nav

/*
#include<stdint.h>
#include<stdbool.h>
extern void* nav_NewBuildSettings();
extern void nav_BuildSettings_Delete(void * c_this);
extern void nav_BuildSettings_DeleteArray(void * c_this);
extern void * nav_BuildSettings_GetPtrToAgentHeight(void * c_this);
extern void * nav_BuildSettings_GetPtrToAgentMaxClimb(void * c_this);
extern void * nav_BuildSettings_GetPtrToAgentMaxSlope(void * c_this);
extern void * nav_BuildSettings_GetPtrToAgentRadius(void * c_this);
extern void * nav_BuildSettings_GetPtrToCellHeight(void * c_this);
extern void * nav_BuildSettings_GetPtrToCellSize(void * c_this);
extern void * nav_BuildSettings_GetPtrToDetailSampleDist(void * c_this);
extern void * nav_BuildSettings_GetPtrToDetailSampleMaxError(void * c_this);
extern void * nav_BuildSettings_GetPtrToEdgeMaxError(void * c_this);
extern void * nav_BuildSettings_GetPtrToEdgeMaxLen(void * c_this);
extern void * nav_BuildSettings_GetPtrToNavMeshBMax(void * c_this);
extern void * nav_BuildSettings_GetPtrToNavMeshBMin(void * c_this);
extern void * nav_BuildSettings_GetPtrToPartitionType(void * c_this);
extern void * nav_BuildSettings_GetPtrToRegionMergeSize(void * c_this);
extern void * nav_BuildSettings_GetPtrToRegionMinSize(void * c_this);
extern void * nav_BuildSettings_GetPtrToTileSize(void * c_this);
extern void * nav_BuildSettings_GetPtrToVertsPerPoly(void * c_this);
extern void * nav_BuildSettings_IndexArray(void * c_this,long n);
extern void* nav_NewConvexVolume();
extern void nav_ConvexVolume_Delete(void * c_this);
extern void nav_ConvexVolume_DeleteArray(void * c_this);
extern void * nav_ConvexVolume_GetPtrToArea(void * c_this);
extern void * nav_ConvexVolume_GetPtrToHmax(void * c_this);
extern void * nav_ConvexVolume_GetPtrToHmin(void * c_this);
extern void * nav_ConvexVolume_GetPtrToNverts(void * c_this);
extern void * nav_ConvexVolume_GetPtrToVerts(void * c_this);
extern void * nav_ConvexVolume_IndexArray(void * c_this,long n);
extern void nav_InputGeom_addConvexVolume(void * c_this,void * verts,int nverts,float minh,float maxh,unsigned char area);
extern void nav_InputGeom_addOffMeshConnection(void * c_this,void * spos,void * epos,float rad,unsigned char bidir,unsigned char area,unsigned short flags);
extern void nav_InputGeom_Delete(void * c_this);
extern void nav_InputGeom_DeleteArray(void * c_this);
extern void nav_InputGeom_deleteConvexVolume(void * c_this,int i);
extern void nav_InputGeom_deleteOffMeshConnection(void * c_this,int i);
extern void nav_InputGeom_drawConvexVolumes(void * c_this,void * dd,bool hilight);
extern void nav_InputGeom_drawOffMeshConnections(void * c_this,void * dd,bool hilight);
extern void * nav_InputGeom_getBuildSettings(void * c_this);
extern void * nav_InputGeom_getChunkyMesh(void * c_this);
extern int nav_InputGeom_getConvexVolumeCount(void * c_this);
extern void * nav_InputGeom_getConvexVolumes(void * c_this);
extern void * nav_InputGeom_getMesh(void * c_this);
extern void * nav_InputGeom_getMeshBoundsMax(void * c_this);
extern void * nav_InputGeom_getMeshBoundsMin(void * c_this);
extern void * nav_InputGeom_getNavMeshBoundsMax(void * c_this);
extern void * nav_InputGeom_getNavMeshBoundsMin(void * c_this);
extern void * nav_InputGeom_getOffMeshConnectionAreas(void * c_this);
extern int nav_InputGeom_getOffMeshConnectionCount(void * c_this);
extern void * nav_InputGeom_getOffMeshConnectionDirs(void * c_this);
extern void * nav_InputGeom_getOffMeshConnectionFlags(void * c_this);
extern void * nav_InputGeom_getOffMeshConnectionId(void * c_this);
extern void * nav_InputGeom_getOffMeshConnectionRads(void * c_this);
extern void * nav_InputGeom_getOffMeshConnectionVerts(void * c_this);
extern void * nav_InputGeom_IndexArray(void * c_this,long n);
extern void* nav_NewInputGeom();
extern bool nav_InputGeom_raycastMesh(void * c_this,void * src,void * dst,void * tmin);
extern bool nav_InputGeom_saveGeomSet(void * c_this,void * settings);
extern void * nav_NewBuildSettingsPtrArray(long n);
extern void * nav_NewConvexVolumePtrArray(long n);
extern void * nav_NewInputGeomPtrArray(long n);

*/
import "C"
import "unsafe"
import "gitee.com/hasika/cgo"

var _ unsafe.Pointer
var _ cgo.NotUsed

type BuildSettingsPtr uintptr

/*
public BuildSettings()
*/
func NewBuildSettings() cgo.GoManagedPtr[BuildSettingsPtr] {
	wrap_out := C.nav_NewBuildSettings()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[BuildSettingsPtr]](uintptr(wrap_out))
	return go_out
}

/*
public void Delete()
*/
func (p BuildSettingsPtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_BuildSettings_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p BuildSettingsPtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_BuildSettings_DeleteArray(wrap_this)
}

/*
Agent height in world units

public float * GetPtrToAgentHeight()
*/
func (p BuildSettingsPtr) GetPtrToAgentHeight() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToAgentHeight(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Agent max climb in world units

public float * GetPtrToAgentMaxClimb()
*/
func (p BuildSettingsPtr) GetPtrToAgentMaxClimb() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToAgentMaxClimb(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Agent max slope in degrees

public float * GetPtrToAgentMaxSlope()
*/
func (p BuildSettingsPtr) GetPtrToAgentMaxSlope() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToAgentMaxSlope(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Agent radius in world units

public float * GetPtrToAgentRadius()
*/
func (p BuildSettingsPtr) GetPtrToAgentRadius() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToAgentRadius(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Cell height in world units

public float * GetPtrToCellHeight()
*/
func (p BuildSettingsPtr) GetPtrToCellHeight() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToCellHeight(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Cell size in world units

public float * GetPtrToCellSize()
*/
func (p BuildSettingsPtr) GetPtrToCellSize() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToCellSize(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Detail sample distance in voxels

public float * GetPtrToDetailSampleDist()
*/
func (p BuildSettingsPtr) GetPtrToDetailSampleDist() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToDetailSampleDist(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Detail sample max error in voxel heights.

public float * GetPtrToDetailSampleMaxError()
*/
func (p BuildSettingsPtr) GetPtrToDetailSampleMaxError() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToDetailSampleMaxError(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Edge max error in voxels

public float * GetPtrToEdgeMaxError()
*/
func (p BuildSettingsPtr) GetPtrToEdgeMaxError() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToEdgeMaxError(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Edge max length in world units

public float * GetPtrToEdgeMaxLen()
*/
func (p BuildSettingsPtr) GetPtrToEdgeMaxLen() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToEdgeMaxLen(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float(*)[3] GetPtrToNavMeshBMax()
*/
func (p BuildSettingsPtr) GetPtrToNavMeshBMax() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToNavMeshBMax(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Bounds of the area to mesh

public float(*)[3] GetPtrToNavMeshBMin()
*/
func (p BuildSettingsPtr) GetPtrToNavMeshBMin() *[3]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToNavMeshBMin(wrap_this)
	go_out := (*[3]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Partition type, see SamplePartitionType

public int * GetPtrToPartitionType()
*/
func (p BuildSettingsPtr) GetPtrToPartitionType() *int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToPartitionType(wrap_this)
	go_out := (*int32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Region merge size in voxels.
regionMergeSize = sqrt(regionMergeArea)

public float * GetPtrToRegionMergeSize()
*/
func (p BuildSettingsPtr) GetPtrToRegionMergeSize() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToRegionMergeSize(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Region minimum size in voxels.
regionMinSize = sqrt(regionMinArea)

public float * GetPtrToRegionMinSize()
*/
func (p BuildSettingsPtr) GetPtrToRegionMinSize() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToRegionMinSize(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Size of the tiles in voxels

public float * GetPtrToTileSize()
*/
func (p BuildSettingsPtr) GetPtrToTileSize() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToTileSize(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToVertsPerPoly()
*/
func (p BuildSettingsPtr) GetPtrToVertsPerPoly() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_GetPtrToVertsPerPoly(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
BuildSettings * IndexArray(long n)
*/
func (p BuildSettingsPtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_BuildSettings_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

type ConvexVolumePtr uintptr

/*
public ConvexVolume()
*/
func NewConvexVolume() cgo.GoManagedPtr[ConvexVolumePtr] {
	wrap_out := C.nav_NewConvexVolume()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[ConvexVolumePtr]](uintptr(wrap_out))
	return go_out
}

/*
public void Delete()
*/
func (p ConvexVolumePtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_ConvexVolume_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p ConvexVolumePtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_ConvexVolume_DeleteArray(wrap_this)
}

/*
public int * GetPtrToArea()
*/
func (p ConvexVolumePtr) GetPtrToArea() *int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_ConvexVolume_GetPtrToArea(wrap_this)
	go_out := (*int32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToHmax()
*/
func (p ConvexVolumePtr) GetPtrToHmax() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_ConvexVolume_GetPtrToHmax(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float * GetPtrToHmin()
*/
func (p ConvexVolumePtr) GetPtrToHmin() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_ConvexVolume_GetPtrToHmin(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public int * GetPtrToNverts()
*/
func (p ConvexVolumePtr) GetPtrToNverts() *int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_ConvexVolume_GetPtrToNverts(wrap_this)
	go_out := (*int32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float(*)[36] GetPtrToVerts()
*/
func (p ConvexVolumePtr) GetPtrToVerts() *[36]float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_ConvexVolume_GetPtrToVerts(wrap_this)
	go_out := (*[36]float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
ConvexVolume * IndexArray(long n)
*/
func (p ConvexVolumePtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_ConvexVolume_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

type InputGeomPtr uintptr

/*
public void addConvexVolume(float const * verts, int const nverts, float const minh, float const maxh, unsigned char area)
*/
func (p InputGeomPtr) AddConvexVolume(verts *float32, nverts int32, minh float32, maxh float32, area uint8) {
	var wrap_this unsafe.Pointer
	var wrap_arg_verts unsafe.Pointer
	var wrap_arg_nverts C.int
	var wrap_arg_minh C.float
	var wrap_arg_maxh C.float
	var wrap_arg_area C.uchar
	wrap_this = unsafe.Pointer(p)
	wrap_arg_verts = (unsafe.Pointer)(verts)
	wrap_arg_nverts = (C.int)(nverts)
	wrap_arg_minh = (C.float)(minh)
	wrap_arg_maxh = (C.float)(maxh)
	wrap_arg_area = (C.uchar)(area)
	C.nav_InputGeom_addConvexVolume(wrap_this, wrap_arg_verts, wrap_arg_nverts, wrap_arg_minh, wrap_arg_maxh, wrap_arg_area)
}

/*
public void addOffMeshConnection(float const * spos, float const * epos, float const rad, unsigned char bidir, unsigned char area, unsigned short flags)
*/
func (p InputGeomPtr) AddOffMeshConnection(spos *float32, epos *float32, rad float32, bidir uint8, area uint8, flags uint16) {
	var wrap_this unsafe.Pointer
	var wrap_arg_spos unsafe.Pointer
	var wrap_arg_epos unsafe.Pointer
	var wrap_arg_rad C.float
	var wrap_arg_bidir C.uchar
	var wrap_arg_area C.uchar
	var wrap_arg_flags C.ushort
	wrap_this = unsafe.Pointer(p)
	wrap_arg_spos = (unsafe.Pointer)(spos)
	wrap_arg_epos = (unsafe.Pointer)(epos)
	wrap_arg_rad = (C.float)(rad)
	wrap_arg_bidir = (C.uchar)(bidir)
	wrap_arg_area = (C.uchar)(area)
	wrap_arg_flags = (C.ushort)(flags)
	C.nav_InputGeom_addOffMeshConnection(wrap_this, wrap_arg_spos, wrap_arg_epos, wrap_arg_rad, wrap_arg_bidir, wrap_arg_area, wrap_arg_flags)
}

/*
public void Delete()
*/
func (p InputGeomPtr) Delete() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_InputGeom_Delete(wrap_this)
}

/*
void DeleteArray()
*/
func (p InputGeomPtr) DeleteArray() {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	C.nav_InputGeom_DeleteArray(wrap_this)
}

/*
public void deleteConvexVolume(int i)
*/
func (p InputGeomPtr) DeleteConvexVolume(i int32) {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	C.nav_InputGeom_deleteConvexVolume(wrap_this, wrap_arg_i)
}

/*
public void deleteOffMeshConnection(int i)
*/
func (p InputGeomPtr) DeleteOffMeshConnection(i int32) {
	var wrap_this unsafe.Pointer
	var wrap_arg_i C.int
	wrap_this = unsafe.Pointer(p)
	wrap_arg_i = (C.int)(i)
	C.nav_InputGeom_deleteOffMeshConnection(wrap_this, wrap_arg_i)
}

/*
public void drawConvexVolumes(duDebugDraw * dd, bool hilight=0)
*/
func (p InputGeomPtr) DrawConvexVolumes(dd DuDebugDrawPtr, hilight bool) {
	var wrap_this unsafe.Pointer
	var wrap_arg_dd unsafe.Pointer
	var wrap_arg_hilight C._Bool
	wrap_this = unsafe.Pointer(p)
	wrap_arg_dd = (unsafe.Pointer)(dd)
	wrap_arg_hilight = (C._Bool)(hilight)
	C.nav_InputGeom_drawConvexVolumes(wrap_this, wrap_arg_dd, wrap_arg_hilight)
}

/*
public void drawOffMeshConnections(duDebugDraw * dd, bool hilight=0)
*/
func (p InputGeomPtr) DrawOffMeshConnections(dd DuDebugDrawPtr, hilight bool) {
	var wrap_this unsafe.Pointer
	var wrap_arg_dd unsafe.Pointer
	var wrap_arg_hilight C._Bool
	wrap_this = unsafe.Pointer(p)
	wrap_arg_dd = (unsafe.Pointer)(dd)
	wrap_arg_hilight = (C._Bool)(hilight)
	C.nav_InputGeom_drawOffMeshConnections(wrap_this, wrap_arg_dd, wrap_arg_hilight)
}

/*
public BuildSettings const * getBuildSettings() const
*/
func (p InputGeomPtr) GetBuildSettings() BuildSettingsPtr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getBuildSettings(wrap_this)
	go_out := cgo.MakePtr[BuildSettingsPtr](uintptr(wrap_out))
	return go_out
}

/*
public rcChunkyTriMesh const * getChunkyMesh() const
*/
func (p InputGeomPtr) GetChunkyMesh() RcChunkyTriMeshPtr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getChunkyMesh(wrap_this)
	go_out := cgo.MakePtr[RcChunkyTriMeshPtr](uintptr(wrap_out))
	return go_out
}

/*
Box Volumes.
@
{

public int getConvexVolumeCount() const
*/
func (p InputGeomPtr) GetConvexVolumeCount() int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getConvexVolumeCount(wrap_this)
	go_out := int32(wrap_out)
	return go_out
}

/*
public ConvexVolume const * getConvexVolumes() const
*/
func (p InputGeomPtr) GetConvexVolumes() ConvexVolumePtr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getConvexVolumes(wrap_this)
	go_out := cgo.MakePtr[ConvexVolumePtr](uintptr(wrap_out))
	return go_out
}

/*
Method to return static mesh data.

public rcMeshLoaderObj const * getMesh() const
*/
func (p InputGeomPtr) GetMesh() RcMeshLoaderObjPtr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getMesh(wrap_this)
	go_out := cgo.MakePtr[RcMeshLoaderObjPtr](uintptr(wrap_out))
	return go_out
}

/*
public float const * getMeshBoundsMax() const
*/
func (p InputGeomPtr) GetMeshBoundsMax() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getMeshBoundsMax(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float const * getMeshBoundsMin() const
*/
func (p InputGeomPtr) GetMeshBoundsMin() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getMeshBoundsMin(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float const * getNavMeshBoundsMax() const
*/
func (p InputGeomPtr) GetNavMeshBoundsMax() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getNavMeshBoundsMax(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float const * getNavMeshBoundsMin() const
*/
func (p InputGeomPtr) GetNavMeshBoundsMin() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getNavMeshBoundsMin(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public unsigned char const * getOffMeshConnectionAreas() const
*/
func (p InputGeomPtr) GetOffMeshConnectionAreas() *uint8 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getOffMeshConnectionAreas(wrap_this)
	go_out := (*uint8)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
Off-Mesh connections.
@
{

public int getOffMeshConnectionCount() const
*/
func (p InputGeomPtr) GetOffMeshConnectionCount() int32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getOffMeshConnectionCount(wrap_this)
	go_out := int32(wrap_out)
	return go_out
}

/*
public unsigned char const * getOffMeshConnectionDirs() const
*/
func (p InputGeomPtr) GetOffMeshConnectionDirs() *uint8 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getOffMeshConnectionDirs(wrap_this)
	go_out := (*uint8)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public unsigned short const * getOffMeshConnectionFlags() const
*/
func (p InputGeomPtr) GetOffMeshConnectionFlags() *uint16 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getOffMeshConnectionFlags(wrap_this)
	go_out := (*uint16)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public unsigned int const * getOffMeshConnectionId() const
*/
func (p InputGeomPtr) GetOffMeshConnectionId() *uint32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getOffMeshConnectionId(wrap_this)
	go_out := (*uint32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float const * getOffMeshConnectionRads() const
*/
func (p InputGeomPtr) GetOffMeshConnectionRads() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getOffMeshConnectionRads(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
public float const * getOffMeshConnectionVerts() const
*/
func (p InputGeomPtr) GetOffMeshConnectionVerts() *float32 {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_getOffMeshConnectionVerts(wrap_this)
	go_out := (*float32)(unsafe.Pointer(wrap_out))
	return go_out
}

/*
InputGeom * IndexArray(long n)
*/
func (p InputGeomPtr) IndexArray(n int) uintptr {
	var wrap_this unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_out := C.nav_InputGeom_IndexArray(wrap_this, C.long(n))
	go_out := uintptr(wrap_out)
	return go_out
}

/*
public InputGeom()
*/
func NewInputGeom() cgo.GoManagedPtr[InputGeomPtr] {
	wrap_out := C.nav_NewInputGeom()
	go_out := cgo.MakePtr[cgo.GoManagedPtr[InputGeomPtr]](uintptr(wrap_out))
	return go_out
}

/*
public bool raycastMesh(float * src, float * dst, float& tmin)
*/
func (p InputGeomPtr) RaycastMesh(src *float32, dst *float32, tmin *float32) bool {
	var wrap_this unsafe.Pointer
	var wrap_arg_src unsafe.Pointer
	var wrap_arg_dst unsafe.Pointer
	var wrap_arg_tmin unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_arg_src = (unsafe.Pointer)(src)
	wrap_arg_dst = (unsafe.Pointer)(dst)
	wrap_arg_tmin = (unsafe.Pointer)(tmin)
	wrap_out := C.nav_InputGeom_raycastMesh(wrap_this, wrap_arg_src, wrap_arg_dst, wrap_arg_tmin)
	go_out := bool(wrap_out)
	return go_out
}

/*
public bool saveGeomSet(BuildSettings const * settings)
*/
func (p InputGeomPtr) SaveGeomSet(settings BuildSettingsPtr) bool {
	var wrap_this unsafe.Pointer
	var wrap_arg_settings unsafe.Pointer
	wrap_this = unsafe.Pointer(p)
	wrap_arg_settings = (unsafe.Pointer)(settings)
	wrap_out := C.nav_InputGeom_saveGeomSet(wrap_this, wrap_arg_settings)
	go_out := bool(wrap_out)
	return go_out
}

/*
BuildSettings * NewBuildSettingsPtrArray(long n)
*/
func NewBuildSettingsPtrArray(n int) cgo.GoManagedPtr[cgo.Array[BuildSettingsPtr]] {
	wrap_out := C.nav_NewBuildSettingsPtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[BuildSettingsPtr]]](uintptr(wrap_out))
	return go_out
}

/*
ConvexVolume * NewConvexVolumePtrArray(long n)
*/
func NewConvexVolumePtrArray(n int) cgo.GoManagedPtr[cgo.Array[ConvexVolumePtr]] {
	wrap_out := C.nav_NewConvexVolumePtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[ConvexVolumePtr]]](uintptr(wrap_out))
	return go_out
}

/*
InputGeom * NewInputGeomPtrArray(long n)
*/
func NewInputGeomPtrArray(n int) cgo.GoManagedPtr[cgo.Array[InputGeomPtr]] {
	wrap_out := C.nav_NewInputGeomPtrArray(C.long(n))
	go_out := cgo.MakePtr[cgo.GoManagedPtr[cgo.Array[InputGeomPtr]]](uintptr(wrap_out))
	return go_out
}
